home *** CD-ROM | disk | FTP | other *** search
/ Speccy ClassiX 1998 / Speccy ClassiX 98.iso / amiga_system / the_aminet / dev / e / jrhrkrm2.lzh / RKRM_PartTwo / Keymap / maprawkey.e < prev   
Text File  |  1995-09-20  |  3KB  |  98 lines

  1. -> maprawkey.e - Map Intuition RAWKEY events to ANSI with MapRawKey()
  2.  
  3. ->>> Header (globals)
  4. OPT PREPROCESS
  5.  
  6. MODULE 'keymap',
  7.        'devices/inputevent',
  8.        'exec/ports',
  9.        'intuition/intuition'
  10.  
  11. ENUM ERR_NONE, ERR_LIB, ERR_WIN
  12.  
  13. RAISE ERR_LIB IF OpenLibrary()=NIL,
  14.       ERR_WIN IF OpenWindowTagList()=NIL
  15.  
  16. -> E-Note: used to convert an INT to unsigned
  17. #define UNSIGNED(x) ((x) AND $FFFF)
  18.  
  19. DEF window=NIL:PTR TO window
  20. ->>>
  21.  
  22. ->>> PROC main()
  23. PROC main() HANDLE
  24.   DEF imsg:PTR TO intuimessage, eventptr:PTR TO LONG, windowsignal,
  25.       inputevent:PTR TO inputevent, buffer[8]:ARRAY, i, going=TRUE, class
  26.   openall()
  27.   window:=OpenWindowTagList(NIL,
  28.                            [WA_WIDTH,  500,
  29.                             WA_HEIGHT, 60,
  30.                             WA_TITLE,  'MapRawKey - Press Keys',
  31.                             WA_FLAGS,  WFLG_CLOSEGADGET OR WFLG_ACTIVATE,
  32.                             WA_IDCMP,  IDCMP_RAWKEY OR IDCMP_CLOSEWINDOW,
  33.                             NIL])
  34.   windowsignal:=Shl(1, window.userport.sigbit)
  35.  
  36.   -> Initialise inputevent object
  37.   -> E-Note: first allocate it cleared using NEW
  38.   NEW inputevent
  39.   inputevent.class:=IECLASS_RAWKEY
  40.  
  41.   WHILE going
  42.     Wait(windowsignal)
  43.  
  44.     WHILE imsg:=GetMsg(window.userport)
  45.       class:=imsg.class
  46.       SELECT class
  47.       CASE IDCMP_CLOSEWINDOW
  48.         going:=FALSE
  49.       CASE IDCMP_RAWKEY
  50.         inputevent.code:=imsg.code
  51.         inputevent.qualifier:=UNSIGNED(imsg.qualifier)
  52.  
  53.         WriteF('RAWKEY: Code=$\z\h[4]  Qualifier=$\z\h[4]\n',
  54.                imsg.code, UNSIGNED(imsg.qualifier))
  55.  
  56.         -> Make sure deadkeys and qualifiers are taken into account.
  57.         eventptr:=imsg.iaddress
  58.         inputevent.eventaddress:=eventptr[]
  59.  
  60.         -> Map RAWKEY to ANSI
  61.         i:=MapRawKey(inputevent, buffer, 8, NIL)
  62.  
  63.         IF i=-1
  64.           WriteF('*Overflow*')
  65.         ELSEIF i
  66.           -> This key or key combination mapped to something
  67.           WriteF('MAPS TO: ')
  68.           Write(stdout, buffer, i)
  69.           WriteF('\n')
  70.         ENDIF
  71.       ENDSELECT
  72.       ReplyMsg(imsg)
  73.     ENDWHILE
  74.   ENDWHILE
  75. EXCEPT DO
  76.   IF window THEN CloseWindow(window)
  77.   closeall()
  78.   SELECT exception
  79.   CASE ERR_LIB;  WriteF('Error: could not open keymap library\n')
  80.   CASE ERR_WIN;  WriteF('Error: could not open window\n')
  81.   CASE "MEM";    WriteF('Error: ran out of memory\n')
  82.   ENDSELECT
  83. ENDPROC
  84. ->>>
  85.  
  86. ->>> PROC openall()
  87. PROC openall()
  88.   keymapbase:=OpenLibrary('keymap.library', 37)
  89. ENDPROC
  90. ->>>
  91.  
  92. ->>> PROC closeall()
  93. PROC closeall()
  94.   IF keymapbase THEN CloseLibrary(keymapbase)
  95. ENDPROC
  96. ->>>
  97.  
  98.